#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL.Times;
using Cephei.QL;
using Cephei.QL.Indexes;
using Cephei.QL.Termstructures;
using Cephei.QL.Models;
namespace Cephei.QL.Models.Shortrate.Calibrationhelpers
{
     // <summary> 
	// ! \bug This helper does not register with the passed IBOR index and with the evaluation date. Furthermore, the ATM strike rate is not recalculated when any of its observables change.
	// </summary>
    [Guid ("2EE2FB84-1307-4eac-BFEE-743F864CBF74"),ComVisible(true)]
	public interface ICapHelper : Cephei.QL.Models.ICalibrationHelper
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        
		 Double BlackPrice(Double volatility);
        
		 Double ModelValue {get;}
    }

    // <summary> 
	// ! \bug This helper does not register with the passed IBOR index and with the evaluation date. Furthermore, the ATM strike rate is not recalculated when any of its observables change. Factory
	// </summary>
   	[ComVisible(true)]
    public interface ICapHelper_Factory // : Collection_Factory<ICapHelper, ICell<ICapHelper>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        
	    ICapHelper Create (Cephei.QL.Times.IPeriod length, Cephei.QL.IQuote volatility, Cephei.QL.Indexes.IIborIndex index, QL.Times.FrequencyEnum fixedLegFrequency, Cephei.QL.Times.IDayCounter fixedLegDayCounter, Boolean includeFirstSwaplet, Cephei.QL.Termstructures.IYieldTermStructure termStructure, Microsoft.FSharp.Core.FSharpOption<QL.Models.CalibrationHelper.CalibrationErrorTypeEnum> errorType, Cephei.QL.IPricingEngine QL_Pricer);
    }
}

